﻿/*
功能描述:基站性能实时显示，有两种方式：
1、以基站形式轮询显示每个基站的所有性能指标。
2、以性能形式显示所有基站。
说明：所有基站无特殊说明都指所有选中的重点基站
所有指标:排队率、呼叫次数、排队次数、平均排队时间、话务量、上行MCCH利用率、下行MCCH利用率、碰撞率
编写时间:2010.11.29 17:30
编 写 人:qfkong

修   改：由于性能数据显示很慢，改变成由Ajax异步方式获取数据，加快界面显示速度。
修改时间：2011.06.27 8:50
修 改 人：qfkong
*/
var loadMask;
var perData = null; //性能数据
var TBSID = null; //基站ID
var colorList = ['#ff0000', '#6c6c6c']; //颜色
var timeout = 45000; //轮显时间
var updatetime = 900000; //数据更新时间
var currenttime = ''; //当天时间
var historytime = ''; //历史对比时间
//var zb = [{ NAME: '排队率', FIELD: 'QUEUE_RATIO', UNIT: 'PER' }, { NAME: '呼叫次数', FIELD: 'RESE_REQU_CHAN_COUNT', UNIT: 'NUMBER' }, { NAME: '排队次数', FIELD: 'QUEU_REQUET_CHAN_COUNT', UNIT: 'NUMBER' }, { NAME: '平均排队时间', FIELD: 'AVG_QUEUE_TIME', UNIT: '' },
//        { NAME: '话务量', FIELD: 'CALL_ERLANG', UNIT: 'FLOAT' }, { NAME: '上行MCCH利用率', FIELD: 'MCCH_UL_USAGE', UNIT: 'PER' }, { NAME: '下行MCCH利用率', FIELD: 'MCCH_DL_USAGE', UNIT: 'PER' }, { NAME: '碰撞数', FIELD: 'RANDOM_ACCC_COLL', UNIT: 'FLOATNUMBER' }
//    ]; //指标列表
var zb = [{ NAME: '主控信道上行占用率', FIELD: 'UPLINK', UNIT: '%' }, { NAME: '主控信道下行占用率', FIELD: 'DOWNLINK', UNIT: '%' },
{ NAME: '位置更新总次数', FIELD: 'UPDATES_COUNT', UNIT: '' }, { NAME: '呼叫总次数', FIELD: 'CHAN_COUNT', UNIT: '' },
 { NAME: '短信总次数', FIELD: 'MESSAGE_COUNT', UNIT: '' }, { NAME: '切换总次数', FIELD: 'QIEHUAN_COUNT', UNIT: ''}]; //指标列表
var isError = false; //是否运行有错误
var runMethod = 'TBS';
var activeNum = 0; //轮显第几个
var activeCount = 0; //所有轮显数目
var TBSList = []; //TBSID与基站名对应数据集
var selectTBSID = ''; //目前选中的也签TBSID
var taskChange;
var taskUpdate;
//var startDate;

Ext.onReady(function() {
    Ext.chart.Chart.CHART_URL = '../JS/ext-3.0.0/resources/charts.swf';
    Ext.BLANK_IMAGE_URL = '../JS/ext-3.0.0/resources/images/default/s.gif';

    /*
    *   忽略页面中的所有脚本错误提示
    */
    function killErrors() {
        return true;
    }
    window.onerror = killErrors;

    loadMask = new Ext.LoadMask(Ext.getBody(), { msg: "正在加载数据，请稍候..." });
  //  debugger;
    var d = new Date();
    currenttime = d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate();
    d = new Date(d.getFullYear(), d.getMonth(), d.getDate() - 1);
    historytime = window.parent.GetCookie('zhwg_TBSXN_MonitorHistory') || (d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate());
    // window.parent.document.getElementById('ImpMonitorIndexLeft').contentWindow.setNodeChecked(); //设置选中节点
  //  initPage(); //初始化加载界面//////////////////////////////
    setTimeout(function() {
        window.parent.document.getElementById('ImpMonitorIndexLeft').contentWindow.setNodeCheckedInit();
    }, 1000);
});

/*初始化页面*/
function initPage() {
    //  startDate = new Date();
    loadMask.show(); //显示等待窗口
    ChangeShow();
    CreatePanel(); //创建主面板
    GetTBSID();
    ChartByTBS();
 // loadMask.hide(); //关闭数据加载提示框   ///////////////////////
  //  return;///////////////////////////////
}
/*创建以基站名称轮询*/
function ChartByTBS() {
    var panel = Ext.getCmp('mainTabPanel');
    var title = '';
    if (TBSID) {
        for (var i = 0; i < TBSID.length; i++) {
            panel.add(CreateTabPanel('tabPanel_' + TBSID[i], getTBSEqupiName(TBSID[i]), false, null));
        }
        activeCount = TBSID.length;
        //panel.setActiveTab(0);
        selectTBSID = TBSID[0];
    }
}
/*获取所有选中的重点基站ID*/
function GetTBSID() {
    var tbsidStr = window.parent.GetCookie('zhwg_TBSXN');
    if (tbsidStr) {
        var tbsidStrn = tbsidStr.replace(';', ''); //.replace(/','/g, ","); //替换字符串
        tbsidStrn = tbsidStrn.substring(0, tbsidStrn.length - 1); //截取字符串
        TBSID = tbsidStrn.split(','); //分割字符串
        // console.log(tbsidStrn);
        GetPerformance(tbsidStrn);
    }
    else {
        loadMask.hide(); //关闭数据加载提示框 
    }
}
/*获取性能数据*/
function GetPerformance(tbsStr) {
    var starttime = currenttime;  //'2011-06-29'; //  $('')
    var endtime =  historytime;  //'2011-06-28';
    $.ajax({ url: 'TBSChannel.ashx',
        cache: false,
        dataType: 'json',
        type: 'POST',
        data: { getperformance: '', tbsidlist: tbsStr, starttime: starttime, endtime: endtime },
        success: function(dt) {
            if (dt && dt.rows) {
                perData = dt;
                //ChangeShow();
                // createTablePanelItems();
                /*设置任务轮显页签面板*/
                if (!taskChange) {
                    taskChange = {
                        run: function() {
                            var panel = Ext.getCmp('mainTabPanel');
                            if (panel) {
                                if (++activeNum >= activeCount) {
                                    activeNum = 0;
                                }
                                panel.setActiveTab(activeNum);
                            }
                        },
                        interval: timeout //轮显数据
                    };
                    /*设置任务更新基站性能数据*/
                    taskUpdate = {
                        run: function() {
                            GetTBSID();
                        },
                        interval: updatetime //更新基站性能数据，半小时
                    };
                    Ext.TaskMgr.start(taskChange); //启动任务轮显
                    Ext.TaskMgr.start(taskUpdate); //启动任务更新数据

                }
                Ext.getCmp('mainTabPanel').setActiveTab(activeNum);
                // console.log('数据加载');
                loadMask.hide(); //关闭数据加载提示框
                // alert('数据加载时间：' + (new Date() - startDate));
            }
        },
        error: function(e) {
        }
    });
}
/*创建也签对象元素*/
function createTablePanelItems() {
    for (var i = 0, length = TBSID.length; i < length; i++) {
        if (!$('#divReport_' + TBSID[i])[0]) {
            $('<div>').css({ 'width': '100%', 'margim-top': '15px', 'vertical-align': 'middle', 'font-family': 'Arial', 'font-size': '16px', 'font-weight': 'bold', 'line-height': '28px', 'text-align': 'center' }).html(getTBSEqupiName(TBSID[i])).attr({ 'id': 'divReport_' + TBSID[i] }).appendTo($('#tabPanel_' + TBSID[i]));
        }
        for (var j = 0, count = zb.length; j < count; j++) {
            if ($('#divReport_' + zb[j].FIELD + '_' + TBSID[i])[0]) {
                $('#divReport_' + zb[j].FIELD + '_' + TBSID[i]).remove();
                //console.log('销毁：divReport_' + zb[j].FIELD + '_' + TBSID[i]);
            }
            $('<div>').css({ 'margin': '5px', 'float': 'left' }).attr({ 'id': 'divReport_' + zb[j].FIELD + '_' + TBSID[i] }).appendTo($('#tabPanel_' + TBSID[i]));
            if (j == 0 || j == 1) {
                $('#divReport_' + zb[j].FIELD + '_' + TBSID[i]).css({ 'margin-top': '20px' });
            }
            //console.log('创建:divReport_' + zb[j].FIELD + '_' + TBSID[i]);
        }
    }
}
/*创建单个页签*/
function createTablePanelItemsByTBSID(id) {
    if (!$('#divReport_' + id)[0]) {
        $('<div>').css({ 'width': '100%', 'margim-top': '15px', 'vertical-align': 'middle', 'font-family': 'Arial', 'font-size': '16px', 'font-weight': 'bold', 'line-height': '28px', 'text-align': 'center' })
            .html(getTBSEqupiName(id))
            .attr({ 'id': 'divReport_' + id })
            .appendTo($('#tabPanel_' + id));

        for (var j = 0, count = zb.length; j < count; j++) {
            if ($('#divReport_' + zb[j].FIELD + '_' + id)[0]) {
                $('#divReport_' + zb[j].FIELD + '_' + id).remove();
                //console.log('销毁：divReport_' + zb[j].FIELD + '_' + id);
            }
            $('<div>').css({ 'margin': '5px', 'float': 'left' })
            .attr({ 'id': 'divReport_' + zb[j].FIELD + '_' + id }).appendTo($('#tabPanel_' + id));
            //if (j == 0 || j == 1) {
                $('#divReport_' + zb[j].FIELD + '_' + id).css({ 'margin-top': '20px' });
           // }
            //console.log('创建:divReport_' + zb[j].FIELD + '_' + id);
        }
    }
}
/*改变轮显方式*/
function ChangeShow() {
    var changeValue = document.getElementById('rbtnMethod').value;
    var panel = Ext.getCmp('mainTabPanel');
    if (panel) {
        $('#mainTabPanel').remove();
    }
}
/*创建基本容器面板*/
function CreatePanel() {
    new Ext.TabPanel({
        renderTo: 'containMain',
        id: 'mainTabPanel',
        activeTab: 0,
        border: true,
        layoutOnTabChange: true,
        defaults: { autoScroll: true },
        enableTabScroll: true,
        closeAll: true,
        tabWidth: 250,
        minTabWidth: 120,
        height: 680,
        items: []
    });
}
/*创建子TAB面板*/
function CreateTabPanel(id, title, isClose, item) {
    return new Ext.Panel({
        iconCls: 'tab',
        id: id,
        enableTabScroll: true,
        defaults: { autoScroll: true, height: 380, width: 490 },
        style: { marginLeft: '5px' },
        xtype: 'tabpanel',
        closable: true,
        title: title,
        items: [],
        loadMask: new Ext.LoadMask(Ext.getBody(), { msg: "正在加载数据，请稍后..." }), // 加载数据时遮蔽表格
        listeners: {
            activate: function(obj) {
                selectTBSID =obj.id.replace('tabPanel_','');// obj.id.split('_')[1];//tbs ID号问题(含有_)，需要调整对应的值
                // for (var i = 0, length = zb.length; i < length; i++) {
                //createChartLine(selectTBSID, zb[i]);
                // }
                createChartLine(selectTBSID);
                // console.log('即或' + selectTBSID);
            }
        }
    });
}
/*获取基站名称*/
function getTBSEqupiName(neid) {
    return window.parent.document.getElementById('ImpMonitorIndexLeft').contentWindow.getNodeName(neid);
}
/*创建统计曲线*/
function createChartLine(id) {
    if (perData) {
        createTablePanelItemsByTBSID(id);
        var z;
        for (var i = 0, length = zb.length; i < length; i++) {
            z = zb[i];
            var myChart = new FusionCharts("../JS/FusionCharts/swf/MSLine.swf?LoadDataErrorText=没有数据!", "RC" + z.FIELD + id, "380", "200", "0", "1");
            myChart.setDataXML(setXML(findData(id, z), z));
            myChart.render("divReport_" + z.FIELD + '_' + id);
        }
        //console.log("绑定：divReport_" + zb.FIELD + '_' + id);
        // alert('统计图加载完成：' + (new Date() - startDate));
    }
}

/*获取统计图字符串*/
function setXML(dt, zb) {
    if (dt) {
        var xmlTitleStr = '<chart caption="' + zb.NAME + '" showValues="0" showLegend="1"';
        if (zb.UNIT) {
            xmlTitleStr += '  numberSuffix="' + zb.UNIT + '" ';
        }
        xmlTitleStr += '  bgColor="#FFFFFF" anchorRadius ="0" labelStep="9" canvasBgAlpha="100" formatNumberScale="0" canvasBorderThickness="0" chartRightMargin ="10" chartLeftMargin ="5" showYAxisValues="1"  showXAxisValues="0" numDivLines="1" showLabels ="1">';
        //XML文件报表样式
        var xmlStyleStr = ' <styles>';
        xmlStyleStr += ' <definition>';
        xmlStyleStr += '        <style name="myCaptionFont" type="font" font="Arial" size="14" color="666666" bold="1"/>';
        xmlStyleStr += '        <style name="myLabelsFont" type="font" font="Arial" size="10" bold="0" underline="0"/>';
        xmlStyleStr += '        <style name="myLegendFont" type="font" size="11"/>';
        xmlStyleStr += '        <style name="myToolTipFont" type="font" font="Arial" size="11"/>';
        xmlStyleStr += '     </definition>';
        xmlStyleStr += '     <application>';
        xmlStyleStr += '        <apply toObject="Caption" styles="myCaptionFont" />';
        xmlStyleStr += '        <apply toObject="DataLabels" styles="myLabelsFont" />';
        xmlStyleStr += '        <apply toObject="Legend" styles="myLegendFont" />';
        xmlStyleStr += '        <apply toObject="ToolTip" styles="myToolTipFont" />';
        xmlStyleStr += '     </application>';
        xmlStyleStr += '   </styles>';
        var xmlData = '';
        var xmlCaptionStr = '<categories>';
        for (var length = dt.rows.length, i = length - 1; i > -1; i--) {
            xmlData += '<dataset seriesName="' + dt.rows[i].STATICTIME + '" color ="' + colorList[i] + '">';
            for (var count = dt.rows[i].rows.length, j = 0; j < count; j++) {
                xmlData += '<set value="' + dt.rows[i].rows[j][zb.FIELD] + '" ';
                if (j == count - 1) {
                    xmlData += ' showValue="1" ';
                }
                xmlData += ' tooltext="' + dt.rows[i].STATICTIME;
                xmlData += '{br}' + dt.rows[i].rows[j].STATICTIME + '{br}' + dt.rows[i].rows[j][zb.FIELD] + (zb.UNIT || '') + '" />';
                if (i == 1) {
                    xmlCaptionStr += ' <category label="' + (dt.rows[i].rows[j].STATICTIME.split(' ')[1]) + '" />';
                }
            }
            xmlData += '</dataset>';
        }
        xmlCaptionStr += '</categories>';
        // console.log(xmlTitleStr + xmlCaptionStr + xmlData + xmlStyleStr + '</chart>');
        return xmlTitleStr + xmlCaptionStr + xmlData + xmlStyleStr + '</chart>';
    }
    else {
        return '';
    }
}
/*从数据集中查找相应的数据*/
function findData(neid, zb) {
    if (perData) {
        var xnd = { rows: [] };
        for (var i = 0, length = perData.rows.length; i < length; i++) {
            for (var j = 0, count = perData.rows[i].rows.length; j < count; j++) {
                if (perData.rows[i].rows[j].STATICTYPE == zb.FIELD) {
                    for (var n = 0, nn = perData.rows[i].rows[j].rows.length; n < nn; n++) {
                        if (perData.rows[i].rows[j].rows[n].NE_ID == neid) {
                            xnd.rows.push({ STATICTIME: perData.rows[i].STATICTIME,
                                STATICTYPE: zb.FIELD,
                                rows: perData.rows[i].rows[j].rows[n].rows
                            });
                            break;
                        }
                    }
                    break;
                }
            }
        }
        return xnd;
    }
}
/*设置参数*/
function setParam(ct, ht, ut, to) {
    currenttime = ct;
    historytime = ht;
    timeout = (to || 45000) * 60 * 1000;
    updatetime = (ut || 900000) * 1000;
    GetTBSID();
    Ext.TaskMgr.stopAll();
    taskChange = {
        run: function() {
            var panel = Ext.getCmp('mainTabPanel');
            if (panel) {
                if (++activeNum >= activeCount) {
                    activeNum = 0;
                }
                // console.log('切换:' + activeNum);
                panel.setActiveTab(activeNum);
            }
        },
        interval: timeout //轮显数据
    };
    /*设置任务更新基站性能数据*/
    taskUpdate = {
        run: function() {
            GetTBSID();
        },
        interval: updatetime //更新基站性能数据，半小时
    };
    Ext.TaskMgr.start(taskChange); //启动任务轮显
    Ext.TaskMgr.start(taskUpdate); //启动任务更新数据
}
